#ifndef _SERVER_H_
#define _SERVER_H_

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <signal.h>

#define N 128
#define ADDR "127.0.0.1"
#define PORT 9999
#define ERRLOG(errmsg) do{\
						     perror(errmsg);\
	                         printf("%s --- %s --- %d\n", __FILE__, __func__, __LINE__);\
	                         exit(1);\
						 }while(0)

#define READ     1     //查询用户信息
#define CHANGE   2     //修改用户信息
#define DELETE   3     //删除用户
#define ADD      4     //添加用户
#define LOAD     5     //用户申请登录
#define QUIT     6     //用户退出时发给服务器的通知
#define SUCCESS  7     //服务器操作成功
#define FAILED   8     //服务器操作失败

#define STAFF    10    //普通用户权限级别
#define ADMIN    11    //管理员权限级别

#define USERS    15    //user select
#define USERM    16    //user modify

/**************** 登录类型 ******************/
typedef struct{
	int  type;         //权限级别
	char name[N];      //用户名
	char pwd[N];       //密码
	int  no;           //编号
}USER;

/**************** 用户信息 ******************/
typedef struct{
	char name[N];      //用户名
	char addr[N];      //地址
	int  age;          //年龄
	int  level;        //评级
	int  no;           //编号
	double salary;     //工资
	char phone[N];     //手机号
	int  type;         //员工级别
}INFO;

/**************** 通信信息 ******************/
typedef struct{
	int  sign;         //?
	int  type;         //操作类型种类
	char name[N];      //发送消息的用户名
	INFO info;         //用户信息结构体
	char pwd[N];       //第一次登录验证用
	char data[N];      //操作成功或者失败的信息
}MSG;


/*****************
 * 函数          *
 *****************/

//开启服务器
int Open_server(int sockfd);

//创建初始管理员
void Creat_admin();

//执行
void Do_all(int acceptfd);

//登录
void Do_login(int acceptfd, MSG *msg);

//添加用户信息
int Do_adduser(int acceptfd, MSG *msg);

//删除用户信息
int Do_deluser(int acceptfd, MSG *msg);

//修改用户信息
int Do_modifyuser(int acceptfd, MSG *msg);

//查询用户信息
int Do_selectuser(int acceptfd, MSG *msg);

int Do_user_select(int acceptfd, MSG *msg);

int Do_user_modify(int acceptfd, MSG *msg);




#endif
